/*
 * @Description:
 * @Author: yilingsj（315800015@qq.com）
 * @Date: 2021-06-27 22:09:28
 * @LastEditors: yiling (315800015@qq.com)
 * @LastEditTime: 2021-07-12 11:57:40
 * @FilePath: \tm_uni_app\src\api\http.api.js
 */
// 如果没有通过拦截器配置域名的话，可以在这里写上完整的URL(加上域名部分)
// 此处第二个参数vm，就是我们在页面使用的this，你可以通过vm获取vuex等操作，更多内容详见uView对拦截器的介绍部分：
import urlAPI from './urlAPI' // url统一管理

const apis = {}

// api接口统一管理
const install = (Vue, vm) => {
  const urlMap = new Map()

  // 遍历url接口以方便使用键名的形式调用接口。示例：this.$u.api[key](参数)).then((res) => {}).catch(() => {}).then(() => {})
  Object.keys(urlAPI).forEach((key) => {
    urlMap.set(key, urlAPI[key])
  })

  for (const [key, value] of urlMap) {
    apis[key] = (params = {}) => {
      const { method, url, contentType, auth } = value
      const result = filterUrl(url, params)
      console.log('method=', method, 'value', value)
      return vm.$u[method || 'get'](result.url, result.params, { diy: { contentType, auth } })
    }
  }

  // 挂载
  vm.$u.api = apis
}

/**
 * @author: yilingsj（315800015@qq.com）
 * @description: 过滤url(兼容后端接口/xxx/id?params)
 * @param {String} value url
 * @param {String, Number, Object} params 传递参数
 * @return {*}
 * @Date: 2021-04-12 10:34:45
 */
const filterUrl = (value, data) => {
  let newData = { ...data }
  const result = {
    params: null,
    url: value,
  }
  const reg = /{.*}/

  if (result.url.match(reg)) {
    console.log('特殊url处理之前=', result.url, Date.now())
    const key = data.key
    if ('params' in data) {
      newData = { ...data.params }
    }
    result.url = result.url.replace(reg, key)
    delete newData.key
    console.log('特殊url处理之后=', result.url, Date.now())
  }
  console.log('拦截result修改之后=', result, ';newData=', newData, Date.now())
  result.params = newData
  // if (typeof params === 'object') {
  //   // 对象形式
  //   if (params.urlId !== undefined) {
  //     // xxx/id?xx=xx&xx=xx 匹配这种情况
  //     if (value.match(reg)) {
  //       result.url = value.replace(reg, params.urlId)
  //     } else {
  //       result.url = value + params.urlId
  //     }
  //     result.params = params && params.params
  //     console.log('%c 匹配到了', 'color:#0f0', result)
  //   } else {
  //     result.params = params && (params.params || params)
  //   }
  // } else {
  //   // 普通字符串或数字形式
  //   if (value.match(reg)) {
  //     result.url = value.replace(reg, params)
  //   } else {
  //     result.url = value + params
  //   }
  // }
  return result
}
export default {
  install,
}
